﻿using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.Entity.Validation;
using System.Data.SqlClient;
using Com.ArHat.IDAL;
using Com.ArHat.Model.Models;


namespace Com.ArHat.DAL
{
    /// <summary>
    ///     数据库交互会话，
    ///     如果操作数据库的话直接从这里来操作
    /// </summary>
    public class DbSession : IDbSession //代表的是应用程序跟数据库之间的一次会话，也是数据库访问层的统一入口
    {
        /// <summary>
        ///     代表当前应用程序跟数据库的回话内所有的实体变化，更新会数据库
        /// </summary>
        /// <returns></returns>
        public int SaveChanges() //UintWork单元工作模式
        {
            //调用EF上下文的SaveChanges的方法
            int status = 0;
            try
            {
                status = EFContextFactory.GetCurrentDbContext().SaveChanges();
            }
            catch (Exception dbEx)
            {
                string str = dbEx.Message.ToString();
            }
            return status;
        }

     

        public int ExcuteSql(string strSql, SqlParameter[] parameters)
        {
            try
            {
                return EFContextFactory.GetCurrentDbContext().Database.ExecuteSqlCommand(strSql, parameters);
            }
            catch (Exception e)
            {
                return 0;
            }

        }

        public IEnumerable<string> GetMenuName(string strSql)
        {
            return EFContextFactory.GetCurrentDbContext().Database.SqlQuery<string>(strSql);
        }
        //public IEnumerable<StaticCity> GetEntityCityList(string strSql)
        //{
        //    return EFContextFactory.GetCurrentDbContext().Database.SqlQuery<StaticCity>(strSql);
        //}



        IBaseRepository<User> IDbSession.UserInfoRepository
        {
            get { return new UserInfoRepository(); }
           
        }

        public IBaseRepository<Menu> MenuRepository
        {
            get{return new MenuRepository();}
        }
    }
}